domain modeling made functional